স্প্রিং বুট (Spring Boot) এ Pageable এবং Sort ইন্টারফেস ব্যবহার করে ডাটাবেস থেকে ডেটার পেজিনেশন এবং সঠিক ক্রমে (Sorting) ডেটা রিটার্ন করা যায়। এগুলো ব্যবহার করে বড় ডেটাসেটকে ছোট ছোট অংশে বিভক্ত করা এবং সেগুলোকে প্রয়োজন অনুযায়ী সাজানো সহজ হয়।
Pageable Interface
Pageable ইন্টারফেসটি পেজিনেশন কার্যকর করার জন্য ব্যবহৃত হয়। এটি ডাটার একটি নির্দিষ্ট অংশ (পেজ) ফেরত দেয় এবং প্রতিটি পেজে কতগুলো রেকর্ড থাকবে তা নির্ধারণ করে।
PageRequest তৈরি করা
PageRequest ক্লাসটি Pageable ইন্টারফেসের ইমপ্লিমেন্টেশন সরবরাহ করে। এটি পেজ নম্বর এবং পেজ সাইজ নির্ধারণে ব্যবহৃত হয়।
Pageable pageable = PageRequest.of(pageNumber, pageSize);
Sort Interface
Sort ইন্টারফেসটি ডেটা ক্রমবদ্ধ (Ascending বা Descending) করার জন্য ব্যবহৃত হয়। এটি এক বা একাধিক ফিল্ডের উপর ভিত্তি করে ডেটাকে সাজানোর সুযোগ দেয়।
Sort এর উদাহরণ
Ascending এবং Descending উভয় ধরণের ক্রমবিন্যাস করা যায়।
Sort sort = Sort.by("fieldName").ascending();
Sort sortDescending = Sort.by("fieldName").descending();
Pageable এবং Sort একসাথে ব্যবহার
Pageable এবং Sort একত্রে ব্যবহার করে পেজিনেটেড এবং সঠিক ক্রমে সাজানো ডেটা ফিল্টার করা সম্ভব।
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("fieldName").ascending());
Spring Data JPA তে Pageable এবং Sort এর ব্যবহার
Repository Method
Spring Data JPA এর রেপোজিটরি ইন্টারফেসে পেজিনেশন এবং সোর্টিং ফাংশনালিটি যুক্ত করা হয়:
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
Page<Product> findByCategory(String category, Pageable pageable);
}
কন্ট্রোলার এবং সার্ভিস স্তরে পেজিনেশন ও সোর্টিং প্রয়োগ
সার্ভিস লেয়ার
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public Page<Product> getProductsByCategory(String category, Pageable pageable) {
return productRepository.findByCategory(category, pageable);
}
}
কন্ট্রোলার লেয়ার
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public Page<Product> getProducts(
@RequestParam String category,
@RequestParam int page,
@RequestParam int size,
@RequestParam String sortBy) {
Pageable pageable = PageRequest.of(page, size, Sort.by(sortBy).ascending());
return productService.getProductsByCategory(category, pageable);
}
}
Pagination এবং Sorting এর কার্যপ্রক্রিয়া
Request URL
GET /products?category=electronics&page=0&size=5&sortBy=price
Response (JSON)
{
"content": [
{ "id": 1, "name": "Phone", "price": 500 },
{ "id": 2, "name": "Laptop", "price": 1000 }
],
"pageable": {
"sort": { "sorted": true, "unsorted": false },
"pageNumber": 0,
"pageSize": 5
},
"totalPages": 10,
"totalElements": 50
}
Pageable এবং Sort এর সুবিধা
- ডেটা ব্যবস্থাপনা সহজ: বড় ডেটাসেটকে পেজ আকারে ভাগ করা।
- কাস্টমাইজেশন: প্রয়োজন অনুযায়ী ডেটার ক্রমবিন্যাস ও পেজ আকার নির্ধারণ।
- পারফরম্যান্স উন্নতি: ডাটাবেস থেকে অপ্রয়োজনীয় ডেটা লোড না করে নির্দিষ্ট পেজের ডেটা ফেরত দেওয়া।
- ফ্লেক্সিবিলিটি: একাধিক ফিল্ডের উপর ভিত্তি করে সঠিক ক্রমবিন্যাস করা।
সারাংশ
Spring Boot এ Pageable এবং Sort ইন্টারফেস ব্যবহার করে ডেটার পেজিনেশন এবং সঠিক ক্রমবিন্যাস কার্যকরভাবে করা সম্ভব। এটি REST API-তে ডেটার কার্যকর ব্যবস্থাপনার জন্য একটি আদর্শ পদ্ধতি। এভাবে বড় ডেটাসেটকে ছোট অংশে ভাগ করে ব্যবহারকারীর প্রয়োজন অনুসারে ডেটা উপস্থাপন করা সহজ হয়।